周边POI搜索 Sample详情

最后更新时间:2019年6月17日

POI的周边搜索,即为范围查询方式,根据用户设置的查询范围(支持圆、矩形),可结合信息类型等条件进行查询,搜索满足条件的POI信息点,最后可以通过标注、绘制或者列表方式展示查询到的兴趣点。

周边搜索的实现方法与关键字搜索基本上类似,实现的思路与方法如下:

1

POI查询对象准备

与关键字POI搜索相同。

//创建POI查询对象
PoiSearch poiSearch = new PoiSearch();
//为POI查询对象设置配置好的.db数据,并以此来初始化
poiSearch.initWithDBPath(Environment.getExternalStorageDirectory().getPath()+"/MapGIS Sample/POI/WuHanPOI.db");
//设置查询每页的结果数目
poiSearch.setPageSize(20);

2

设置查询范围、查询类型

周边搜索,通过PoiSearch类对象调用setBound方法设置范围条件,调用setQuery方法设置查询属性条件。

首先,需要创建查询范围对象PoiSearch.SearchBound,根据不同的参数来构造,可以实现圆形范围、矩形范围两种周边搜索方式。一般实现范围查询时,可将查询的范围事先绘制在地图上,待查询POI之后可对比效果,但要注意坐标系一致的问题。

//坐标点
Dot dot = new Dot(12725830.65, 3571659.71);
//查询范围(坐标点、半径)
PoiSearch.SearchBound searchBound = new PoiSearch.SearchBound(dot, 200);
//矩形范围
Rect queryBound = new Rect(12725430, 3571159,12726230, 3571959);
//查询范围(rect矩形)
PoiSearch.SearchBound searchBound = new PoiSearch.SearchBound(queryBound);
//为POI查询对象设置查询范围
mPoiSearch.setBound(searchBound);

设置了查询范围,如果需要进行POI的分类查询,还需要利用setQuery方法设置查询条件,POI类型参考关键字搜索模块中的说明。当然,也可以周边搜索和关键字搜索两种模式结合。

//设置POI查询条件:POI分类查询,如查询“中餐厅”类型
PoiSearch.Query query = new PoiSearch.Query(null, PoiTypeDef.FoodBeverages);
poiSearch.setQuery(query);

3

查询与结果展示

查询POI,遍历查询结果,实现代码与关键字搜索一样,也可通过多种形式展示,核心代码参考关键字搜索小节。

//查询并返回结果
PoiPagedResult searchPoiResult = poiSearch.searchPOI();
//判断是否查询到了结果
if (searchPoiResult != null && searchPoiResult.getTotalPOICount() > 0) {
    //遍历所有页
    for (int i = 1; i <= searchPoiResult.getPageCount(); i++) {
        List<PoiItem> poiItemList = searchPoiResult.getPage(i); //获取每一页的结果集,从1开始
        for (int j = 0; j < poiItemList.size(); j++) {//遍历每一页的结果项
            //获取POI项
            PoiItem poiItem = poiItemList.get(j);
            //获取POI点信息:坐标、名称、地址、电话
            Dot point = poiItem.getPoint();
            String name = poiItem.getName();
            String address = poiItem.getAddress();
            String phoneNum = poiItem.getTel();
        }
    }
    mapView.refresh();   //地图刷新
} else {
    Toast.makeText(this, "查询结果为空", Toast.LENGTH_SHORT).show();
}

POI周边搜索实现效果如下图所示:

周边POI搜索-圆形范围.jpg 周边POI搜索-矩形范围.jpg